/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package sv.edu.ues.fia.appserviciosocial.servicio.service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response;
import sv.edu.ues.fia.appserviciosocial.entidad.Proyecto;

/**
 *
 * @author Rodrigo
 */
@Stateless
@Path("sv.edu.ues.fia.appserviciosocial.entidad.proyecto")
public class ProyectoFacadeREST extends AbstractFacade<Proyecto> {
    @PersistenceContext(unitName = "AppServicioSocialPU")
    private EntityManager em;

    public ProyectoFacadeREST() {
        super(Proyecto.class);
    }
 
    @POST
    //@Override
    @Consumes({"application/xml", "application/json"})
    public Response createProyecto(Proyecto entity) {
        super.create(entity);
        return Response.ok().build();
    }

    @PUT
    @Path("{id}")
    @Consumes({"application/xml", "application/json"})
    public void edit(@PathParam("id") Integer id, Proyecto entity) {
        super.edit(entity);
    }

    @DELETE
    @Path("{id}")
    public void remove(@PathParam("id") Integer id) {
        super.remove(super.find(id));
    }

    @GET
    @Path("{id}")
    @Produces({"application/xml", "application/json"})
    public Proyecto find(@PathParam("id") Integer id) {
        return super.find(id);
    }

    @GET
    @Override
    @Produces({"application/xml", "application/json"})
    public List<Proyecto> findAll() {
        return super.findAll();
    }
    
       //Metodo para encontrar alumnos por fecha
    @GET
    @Path("by")
    @Produces({"application/json"})
    public List<Proyecto> findByFecha(@QueryParam("fecha") String fecha) {
        //Obtenemos la fecha actual
        SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd");
        try {
            //Parseamos la fecha a tipo DATE
            Date fechaInicial = formatoFecha.parse(fecha);
            //Realizamos la consulta
            Query q = getEntityManager().createNamedQuery("Tipoproyecto.findByFecha");
            q.setParameter("fecha", fechaInicial);
            //Retornamos el resultado
            return q.getResultList();
        } catch (ParseException ex) {
            //String de fecha con formato incorrecto
            Logger.getLogger(AlumnoFacadeREST.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }

    @GET
    @Path("{from}/{to}")
    @Produces({"application/xml", "application/json"})
    public List<Proyecto> findRange(@PathParam("from") Integer from, @PathParam("to") Integer to) {
        return super.findRange(new int[]{from, to});
    }

    @GET
    @Path("count")
    @Produces("text/plain")
    public String countREST() {
        return String.valueOf(super.count());
    }

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }
    
}
